<?php

/**
 * Contrôleur de Gestion des utilisateurs
 * @author jc
 * @version 1.0.0.1
 */
class cUtilisateur extends \BaseController{

	public function index(){ 
		$this->loadView("vHeader");
		$this->refresh();
		$this->loadView("vFooter");
	}
	
	public function refresh(){
		$users=DAO::getAll("Utilisateur");
		$selectedUsers=SessionUtils::getArray("selectedUsers");
		$js=JsUtils::getAndBindTo("#btAdd", "click", "cUtilisateur/add","{}","#operation");
		$js.=JsUtils::getAndBindTo(".delete", "click", "cUtilisateur/confirmDelete","{}","#operation");
		$js.=JsUtils::getAndBindTo(".update", "click", "cUtilisateur/update","{}","#operation");
		$js.=JsUtils::getAndBindTo(".ck", "click", "cUtilisateur/select","{}","#message");
		$js.=JsUtils::setChecked("ck", $selectedUsers);
		$js.=JsUtils::setChecked("ckAll", SessionUtils::getBoolean("ckAll"));
		$js.=JsUtils::getAndBindTo("#deleteMulti", "click", "cUtilisateur/confirmDelete/multi","{}","#operation");
		$js.=JsUtils::postAndBindTo("#btMultiToGroup", "click", "cUtilisateur/addUsersToGroup",'{idGroupe: $("#multiGroupe").val()}',"#message");
		$js.=JsUtils::postAndBindTo("#ckAll", "click", "cUtilisateur/selectAll/",'{ids: $("input:checkbox[class=ck]").map(function(){return this.value;}).get().join(",")}',"#message");
		$js.=JsUtils::setHtmlAndBindTo("#btGroupes", "click", "#operation","Fonctionnalité non implémentée",JsUtils::_doSomethingOn("#operation", "show",400));
		
		
		$nb=sizeof($selectedUsers);
		if($nb>0)
			$js.=JsUtils::doSomethingOn("#multi", "show");
		else
			$js.=JsUtils::doSomethingOn("#multi", "hide");
		
		$data=array("users"=>$users,"js"=>$js,"groupes"=>DAO::getAll("Groupe"));
		$this->loadView("vUsers", $data);
	}
	
	public function add(){
		if($_SERVER['REQUEST_METHOD']=='POST'){
			$user=new Utilisateur();
			RequestUtils::setValuesToObject($user,RequestUtils::getPost());
			$user->setGroupe(new Groupe($_POST["idGroupe"]));
			$password=$_POST["password"];
			if(isset($password) && $password!="")
				$user->setPassword(sha1($password));
			if(DAO::insert($user)){
				Gui::showOne($user);
				echo " ajouté";
				echo JsUtils::get("cUtilisateur/refresh","{}","#users");
			}else
				echo "ajout impossible";
			echo JsUtils::doSomethingOn("#operation", "hide",200);
		}else{
			$js=JsUtils::postFormAndBindTo("#btValidAddUser", "click", "cUtilisateur/add", "frmAddUser","#message",true);
			$js.=JsUtils::doSomeThingAndBindTo("#btCancelAddUser", "click", "#operation","hide",200);
			$js.=JsUtils::setHtmlAndBindTo("#btCancelAddUser", "click", "#message","Opération d\'ajout annulée");
			$js.=JsUtils::setAttr("#password", "required",true);
			$js.=JsUtils::doSomethingOn("#operation", "show",400);
				
			$user=new Utilisateur();
			$groupes=DAO::getAll("Groupe");
			$this->loadView("vAddUser", array("user"=>$user,"js"=>$js,"title"=>"Ajouter un utilisateur :","groupes"=>$groupes));
		}
	}
	
	public function update($id){
		if($_SERVER['REQUEST_METHOD']=='POST'){
			$user=new Utilisateur();
			RequestUtils::setValuesToObject($user,RequestUtils::getPost());
			$password=$_POST["password"];
			if(isset($password) && $password!="")
				$user->setPassword(sha1($password));
			$user->setGroupe(new Groupe($_POST["idGroupe"]));
			if(DAO::update($user)){
				Gui::showOne($user);
				echo " modifié";
				echo JsUtils::get("cUtilisateur/refresh","{}","#users");
			}else
				echo "modification impossible";
			echo JsUtils::doSomethingOn("#operation", "hide",200);
		}else{
			$id=str_replace("update", "", $id[0]);
			if(is_numeric($id)){
				$user=DAO::getOne("Utilisateur", "id=".$id);
				$groupes=DAO::getAll("Groupe");
				$js=JsUtils::setVal("#idGroupe", $user->getGroupe()->getId());
				$js.=JsUtils::postFormAndBindTo("#btValidAddUser", "click", "cUtilisateur/update", "frmAddUser","#message",true);
				$js.=JsUtils::doSomeThingAndBindTo("#btCancelAddUser", "click", "#operation","hide",200);
				$js.=JsUtils::setHtmlAndBindTo("#btCancelAddUser", "click", "#message","Opération de mise à jour annulée");
				$js.=JsUtils::bindToElement("#password", "keypress", "function(){".JsUtils::_setAttr("#password", "required",true)."}");
				$js.=JsUtils::doSomethingOn("#operation", "show",400);
				$this->loadView("vAddUser", array("user"=>$user,"js"=>$js,"title"=>"Modifier l'utilisateur :","groupes"=>$groupes));
			}
		}
	}
	
	public function confirmDelete($id){
		$id=str_replace("delete", "", $id[0]);
		if(is_numeric($id)){
			echo "<div class='cadre'>Souhaitez vous supprimer l'utilisateur ? <a id='confirmDelete".$id."' href='#' class='accept'>Confirmer la suppression</a>";
			echo "<a id='cancelDelete' href='#' class='cancel'>Annuler</a>";
			echo JsUtils::getAndBindTo("#confirmDelete".$id, "click", "cUtilisateur/delete/".$id,"{}","#message");
		}else{
			echo "<div class='cadre'>Souhaitez vous supprimer les utilisateurs sélectionnés ? <a id='confirmDelete".$id."' href='#' class='accept'>Confirmer la suppression</a>";
			echo "<a id='cancelDelete' href='#' class='cancel'>Annuler</a>";
				
			echo JsUtils::getAndBindTo("#confirmDelete".$id, "click", "cUtilisateur/deleteMulti/".$id,"{}","#message");
		}
		echo JsUtils::doSomethingOn("#operation", "show",400);
		echo JsUtils::doSomeThingAndBindTo("#cancelDelete", "click", "#operation", "hide",200,JsUtils::_setHtml("#message","Suppression annulée"));
	}
	
	public function deleteMulti(){
		$selectedUsersId=SessionUtils::getArray("selectedUsers");
		$nb=0;
		foreach ($selectedUsersId as $userId){
			$user=new Utilisateur();
			$user->setId($userId);
			if(DAO::delete($user)){
				SessionUtils::removeValueFromArray("selectedUsers", $userId);
				$nb++;
			}
		}
		echo JsUtils::get("cUtilisateur/refresh","{}","#users");
		echo Gui::pluriel("utilisateur supprimé", "utilisateurs supprimés", $nb);
		echo JsUtils::doSomethingOn("#operation", "hide",200);
	}

	public function delete($id){
		$id=str_replace("delete", "", $id[0]);
		if(is_numeric($id)){
			$user=new Utilisateur();
			$user->setId($id);
			if(DAO::delete($user)){
				SessionUtils::removeValueFromArray("selectedUsers", $id);
				Gui::showOne($user);
				echo " supprimé";
				echo JsUtils::get("cUtilisateur/refresh","{}","#users");
			}else {
				echo "Suppression impossible";
			}
		}
		echo JsUtils::doSomethingOn("#operation", "hide",200);
	}
	
	public function select($id){
		$id=str_replace("ck", "", $id[0]);
		if(is_numeric($id)){
			SessionUtils::addOrRemoveValueFromArray("selectedUsers", $id);
			$nb=sizeof($_SESSION["selectedUsers"]);
			if($nb>0)
				echo JsUtils::doSomethingOn("#multi", "show");
			else
				echo JsUtils::doSomethingOn("#multi", "hide");
			Gui::pluriel("utilisateur sélectionné", "utilisateurs sélectionnés", $nb);
		}
	}
	public function selectAll(){
		$nb=0;
		$ckAll=SessionUtils::checkBoolean("ckAll");
		if(!$ckAll){
			$_SESSION["selectedUsers"]=array();
		}else{
			$_SESSION["selectedUsers"]=explode(",", $_POST["ids"]);
			$nb=sizeof($_SESSION["selectedUsers"]);
		}
		echo JsUtils::get("cUtilisateur/refresh/","{}","#users");
		echo Gui::pluriel("utilisateur sélectionné", "utilisateurs sélectionnés", $nb);
	}
	
	public function addUsersToGroup(){
		$idGroupe=$_POST["idGroupe"];
		$selectedUsersId=SessionUtils::getArray("selectedUsers");
		$nb=sizeof($selectedUsersId);
		$where=SqlUtils::getMultiWhere($selectedUsersId, "id");
		$statement=DAO::$db->prepareStatement("update Utilisateur set idGroupe= :idGroupe where ".$where);
		DAO::$db->bindValueFromStatement($statement,"idGroupe",$idGroupe);
		$statement->execute();
		echo JsUtils::get("cUtilisateur/refresh/","{}","#users");
		echo Gui::pluriel("utilisateur a changé de groupe", "utilisateurs ont changé de groupe", $nb);
		echo JsUtils::doSomethingOn("#operation", "hide",200);	
	}
}